package Day05;

import java.util.Random;

public class Day05 {
    public static void main(String[] args) {
//关键字
        //break 用在循环中 用于跳出循环 常常配合if使用
           //(满足特定条件后break触发 提前结束循环 若直接在循环中使用 则循环内后续代码全都无法输出 无意义)

        //continue 只能用于循环中 用于跳过循环体中剩余语句而进入下一次循环
           //应用率不高 换个思路 可以省略continue的步骤
           //例如 输出9的乘法表
                 //能被三整除的跳过>>>可以变为>>>不被三整除的才可输出

//嵌套循环

        System.out.println();//print+line 输出并自动换行  ()里没内容就意为换行
        //转义符
        //\t 其中t为tab缩写----------水平制表位
           //固定占八个位子 不管有没有内容
        //循环中套循环 常用于实现多行多列的效果 类似与矩阵形式
        //行列规则 外层控制行 内层控制列
        //执行规则 外层循环走一次 内层循环走所有次
        //建议 嵌套层数越少越好
           //break默认只能跳出当前一层循环

//数组

        //数组 数据的集合
        //概念 相同数据类型元素(数据)的集合 类型必须相同
        //是一种引用数据类型
        //将一组类型相同,逻辑相关的数据 存到数组中

        //数组的定义
        // int a;声明一个整型变量 名为a
        // int[] b;声明一个整数数组变量 名为b

        //定义数组的语法
        //数组类型[] 数组名= new 数据类型[大小]
        // int []   arr   new   int[3];
        //int []a=new int[3];声明整型数组a 包含3个元素 每个元素都是int类型 默认值是0
        //byte short int long char(码0)----------默认值为0
        //double float--------------------------------默认值为0.0
        //boolean-------------------------------默认值为false

        //数组的初始化(初始化的是里面的数据 数组只是个容器)
        //1 元素数少的时候
        //1)int[] arr=new int[3];//0,0,0 默认数组中有三个默认值0
        //2)int[] arr={2,5,8};//2,5,8 只能一起写 声明的同时初始化 不能分开写(?静态数组)
        //3)int[] arr=new int[]{2,5,8} 可以分开写 先声明后初始化 注意此处[]内不能再写个数了

        //数组的访问
        //获取数组的长度
        //数组的长度即为元素的个数(长度即为元素个数)
        //通过数组名.length可以获取数组的长度
//        System.out.println(arr.length);

//      通过下标访问数组的元素
        /*
        通过下标/索引来访问元素 下标从0开始 最大到<数组长度-1>
        int[] arr=new int[3];
        arr[0]------------代表arr中的第一个元素(int类型)
        arr[1]------------代表arr中的第二个元素(int类型)
        arr[2]------------代表arr中的第三个元素(int类型)
*/
//      给第二个元素赋值为100
//        arr[1]=100;

        //数组的遍历/迭代
        //从头到尾挨个走一边
        //例如
   /*     int[] arr=new int[10];// 需求 给每个元素都赋值100(利用循环)
        for (int i=0;i<arr.length;i++) {//遍历arr数组 不能包括最大长度length 否则会越界
            arr[i]=100;//给每个元素赋值100
            System.out.println(arr[i]);//输出每个元素的值
        }*/

        //数组的复制
        /*1 使用System.arraycopy() 可以实现数组的复制
        //例如 int []A=new int[]{10,20,30,40,50};
        //        int []B=new int[10];
        //        //A 源数组
        //        //1 源数组起始下标
        //        //B 目标数组
        //        //0 目标数组起始下标
        //        //4 复制个数
        //        System.arraycopy(A,1,B,0,4);
        //        for (int i=0;i<B.length;i++){
        //            System.out.println(B[i]);//表示输出数组B的值
        //        }*/

        /*2 Arrays.copyOf() 可以实现数组的复制
        * 需要import一下
        * import java.util Arrays;
        * *特殊用处 数组扩容
        *  数组的长度在创建数组后是不可改变的
        *  原因:内存管理{数组元素的内存空间是连续的}
        *  例如int[] a={1,2,3,4,5};共五个int(每个int占4个字节) 分配连续的20个空间(4*5)
        * 扩容:a=Array.copyOf(a,a.length+1);本质为又创建了一个更大的新数组并将源数组的内容复制进去
        * 只有如此才能保证空间是连续的
        * 而被复制的源数组没有用处了 便被java的垃圾自动回收功能回收了
        * */

        //数组的排序
        /*排序是对数组施加的最常用的算法
        * 所谓排序 指将数组元素按照从小到大(升序)或从大到小(降序)的顺序重新排序
        * 常见排序算法: 冒泡排序 插入排序 快速排序 选择排序 希尔排序
        * java提供了Arrays.sort()封装了数组的排序算法
        *    只做升序排序 没有降序功能
        * 例如int[] arr={2,1,35,21,23,12,123,31}
        * Arrays.sort(arr);
        * 最后输出即可*/

        //随机数
        //1 Math.random()
        //需要强转

        //2 import Java.util.Random;
        Random rand= new Random();
        int a;
        a=rand.nextInt(100);//范围与第一个方法一样
        //不需要强转











    }
}
